#姓名：伍弘毅
#日期：2019年9月29日
#版本：V1.0
#功能：使用if语句处理列表
#通过结合使用if语句和列表，可完成一些有趣的任务：对列表中特定的值做特殊处理
#高效地管理不断变化的情形，如餐馆是否还有特定的食材
#证明代码在各种情形下都将按预期那样运行


##检查特殊元素
#本章开头通过一个简单示例演示了如何处理特殊值'bmw'——它需要采用不同的格式进行打印
#既然你对条件测试和if语句有了大致的认识
#下面来进一步研究如何检查列表中的特殊值，并对其做合适的处理

#继续使用前面的比萨店示例。这家比萨店在制作比萨时，每添加一种配料都打印一条消息
#通过创建一个列表，在其中包含顾客点的配料，并使用一个循环来指出添加到比萨中的配料
#可以以极高的效率编写这样的代码

#example1
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']

for requested_topping in requested_toppings:
	print("Adding " + requested_topping + '.')
	
print("\nFinished making your pizza!")

#然而，如果比萨店的青椒用完了，该如何处理呢？
#为妥善地处理这种情况，可在for循环中包含一条if语句

#example2
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']

for requested_topping in requested_toppings:
	if requested_topping == 'green peppers':
		print("Sorry, we are out of green peppers right now.")
	else:
		print("Adding " + requested_topping + ".")
		
print("\nFinished making your pizza!")


##确定列表不是空的
#到目前为止，对于处理的每个列表都做了一个简单的假设，即假设它们都至少包含一个元素
#我们马上就要让用户来提供存储在列表中的信息，因此不能再假设循环运行时列表不是空的
#有鉴于此，在运行for循环前确定列表是否为空很重要

#下面在制作比萨前检查顾客点的配料列表是否为空
#如果列表是空的，就向顾客确认他是否要点普通比萨
#如果列表不为空，就像前面的示例那样制作比萨

#example3
requested_toppings = []

if requested_toppings:
	for requested_topping in requested_toppings:
		print("Adding " + requested_topping + ".")
	print("\nFinished making your pizza!")
else:
	print("Are you sure you want a plain pizza?")
#在这里，我们首先创建了一个空列表，其中不包含任何配料
#在if语句后我们进行了简单检查，而不是直接执行for循环
#在if语句中将列表名用在条件表达式中时，Python将在列表至少包含一个元素时返回True
#并在列表为空时返回False。如果requested_toppings不为空
#就运行与前一个示例相同的for循环；否则，就打印一条消息
#询问顾客是否确实要点不加任何配料的普通比萨
#在这里，这个列表为空，因此输出——询问顾客是否确实要点普通比萨

##使用多个列表
#在制作比萨前如何拒绝怪异的配料要求
#下面的示例定义了两个列表，其中第一个列表包含比萨店供应的配料
#而第二个列表包含顾客点的配料。这次对于requested_toppings中的每个元素
#都检查它是否是比萨店供应的配料，再决定是否在比萨中添加它

#example4
available_toppings = ['mushrooms', 'olives', 'green peppers', 
					  'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']

for requested_topping in requested_toppings:
	if requested_topping in available_toppings:
		print("Adding " + requested_topping + '.')
	else:
		print("Sorry, we don't have " + requested_topping + '.')

print("\nFinished making your pizza!")
#我们定义了一个列表，其中包含比萨店供应的配料
#请注意，如果比萨店供应的配料是固定的，也可使用一个元组来存储它们
#在之后，我们又创建了一个列表，其中包含顾客点的配料
#请注意那个不同寻常的配料——'french fries'。
#for语句后，我们遍历顾客点的配料列表
#在这个循环中，对于顾客点的每种配料，我们都检查它是否包含在供应的配料列表中
#如果答案是肯定的，就将其加入到比萨中
#否则将运行else代码块，打印一条消息，告诉顾客不供应这种配料
